package com.ruoyi.system.service;


import com.ruoyi.system.domain.entity.SmartReservation;
import com.ruoyi.system.domain.generation.*;
import com.ruoyi.system.domain.moneyentity.SmartCarMonthlyCardRelations;
import com.ruoyi.system.domain.moneyentity.SmartWhitelist;
import org.apache.ibatis.annotations.Param;


import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * ISmartSystemConfigurationService
 * 系统设置接口
 * @author life.
 * @date 2025/3/21
 */
public interface ISmartSystemConfigurationService {

    /**
     * 查询指定绑定 ID 的智能汽车月卡关系及对应的充电规则
     * @param scBindingId 绑定 ID
     * @return 智能汽车月卡关系实体列表，每个实体包含充电规则列表
     */
    List<SmartCarMonthlyCardRelations> selectAllSmartCarMonthlyCardRelations(Long scBindingId,
                                                                             Date scActivationDate,
                                                                             Date scExpiryDate,
                                                                             Long scIsActive);


    /**
     * 根据月卡绑定 ID 更新关联的规则的上架下架状态
     * @param scBindingId 月卡绑定 ID
     * @param scIsActive 新的上架下架状态值
     * @return 受影响的行数
     */
    int updateScIsActiveByMonthlyCardBindingId( Long scBindingId,Long scIsActive);

    /**
     * 根据绑定 ID 修改月卡信息及关联的充电规则信息
     * @param request 修改请求对象
     * @return 受影响的行数
     */
    int updateMonthlyCardInfo(UpdateMonthlyCardInfoRequest request);


    /**
     * 新增月卡信息
     * @param request 新增请求对象
     * @return 受影响的行数
     */
    int insertMonthlyCardInfo(@Param("request") IncreaseMonthlyCardInfoRequest request);


    /**
     * 查询指定白名单 ID 的智能白名单关系及对应的充电规则
     * @param scWhitelistId 白名单 ID
     * @return 智能白名单关系实体列表，每个实体包含充电规则列表
     */
    List<SmartWhitelist> selectAllSmartWhitelist(Long scWhitelistId,
                                                 Date scValidPeriodStart,
                                                 Date scValidPeriodEnd,
                                                 Long scIsActive);

    /**
     * 根据会员 ID 更新上架下架状态
     * @param scWhitelistId 白名单 ID
     * @param scIsActive 新的上架下架状态值
     * @return 受影响的行数
     */
    int updateScIsActiveByWhitelistId(Long scWhitelistId, Long scIsActive);

    /**
     * 根据会员 ID 修改会员信息
     * @param request 修改请求对象
     * @return 受影响的行数
     */
    int updateMemberInfo(UpdateWhileListInfoRequest request);

    /**
     * 新增会员信息
     * @param request 新增请求对象
     * @return 受影响的行数
     */
    int insertMemberInfo(IncreaseWhileListInfoRequest request);



}
